package seu.evaluation.metric;

import seu.xml.validator.GlobalCons;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 * 
 * @author samantha
 * 入口参数：需要进行度量的属性列表，全局变量图的路径
 * 该类职责：1）判断属性对应的图是否完全；2）遍历度量列表进行度量
 *
 */
public class MetricContext {

	private ArrayList<Metric> metrics ;

	public MetricContext( ArrayList<String> metricName ){

		metrics = new  ArrayList<Metric> ();
		/**
		 * metricName为用户需要度量的属性列表
		 * 遍历该列表，生成相应度量对象
		 */
		Metric metric;
		for(String singleMetricName : metricName){
			switch(singleMetricName){
			case "Maintainability":
			
				if( GlobalCons.cmpnDiagram ){
					for( String path : GlobalCons.cmpnDiagramPath ){
						metric = new MaintainabilityMetric(path);	
						metrics.add(metric);
					}
				}
				else{
					JOptionPane.showMessageDialog(null, "缺少组件图，无法进行可维护性度量", "错误",
							JOptionPane.ERROR_MESSAGE);	
				}
				break;
			case "Reliability":
				if( GlobalCons.dplmtDiagram && GlobalCons.sqcDiagram && GlobalCons.ucDiagram){
					metric=new ReliabilityMetric();
					metrics.add(metric);
				}
				else{
					JOptionPane.showMessageDialog(null, "部署图、用例图或顺序图不全，无法进行可靠性度量", 
							"错误",JOptionPane.ERROR_MESSAGE);
				}
				break;
			default:
				break;
				//some other attributes……
			}			
		}
		
		showTotalResults();
	}
	
	/**
	 * 输出结果
	 */
	public void showTotalResults(){	
		for(Metric mc : metrics)
			mc.showResults();
	}
	
	/**
	 * 
	 * @return 度量类列表
	 * 将结果返回给上级
	 */
	public ArrayList<Metric> getTotalResults(){
		return this.metrics;
	}
}



